//矩阵最长递增路径
import java.util.;

public class Solution {
    
      代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     
      递增路径的最大长度
      @param matrix int整型二维数组 描述矩阵的每个数
      @return int整型
     
    public int solve (int[][] matrix) {
         write code here
        int n = matrix.length;
        int m = matrix[0].length;
        boolean[][] flag = new boolean[n][m];
        int[] ret = new int[1];
        for (int i = 0; i  n; i++) {
            for (int j = 0; j  m; j++) {
                dfs(matrix, flag, ret, 1, i, j, n, m);
            }
        }
        return ret[0];
    }

    void dfs(int[][] matrix, boolean[][] flag, int[] ret, int len, int x, int y, int n, int m) {
        ret[0] = Math.max(ret[0], len);
        int tmp = matrix[x][y];
        x++;
        if (x  n && flag[x][y] == false && matrix[x][y]  tmp) {
            flag[x][y] = true;
            dfs(matrix, flag, ret, len+1, x, y, n, m);
            flag[x][y] = false;
        }
        x--;
        x--;
        if (x = 0 && flag[x][y] == false && matrix[x][y]  tmp) {
            flag[x][y] = true;
            dfs(matrix, flag, ret, len+1, x, y, n, m);
            flag[x][y] = false;
        }
        x++;
        y++;
        if (y  m && flag[x][y] == false && matrix[x][y]  tmp) {
            flag[x][y] = true;
            dfs(matrix, flag, ret, len+1, x, y, n, m);
            flag[x][y] = false;
        }
        y--;
        y--;
        if (y = 0 && flag[x][y] == false && matrix[x][y]  tmp) {
            flag[x][y] = true;
            dfs(matrix, flag, ret, len+1, x, y, n, m);
            flag[x][y] = false;
        }
        y++;
    }
}